package com.kb.medical.controller;

import cn.dev33.satoken.exception.SaTokenException;
import com.kb.medical.controller.ex.*;
import com.kb.medical.service.ex.*;
import com.kb.medical.util.JsonResult;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpSession;


/**
 * 控制层类的基类
 */
public class BaseController {

    /**
     * 操作成功的状态码
     */

    public static final int OK = 200;
//    public JsonResult<Void> OK(Integer state ,String message){
//        JsonResult<Void> result = new JsonResult<>(sa);
//        if (state == OK) {
//
//            return result;
//        }
//        return result;
//    }

    //请求处理方法，这个方法的返回值就是需要传递给前端的数据
    //自动将异常对象传递给此方法的参数列表上
    //当前项目中产生了异常，被统一拦截到此方法中，这个方法此时就充当的是请求处理方法，方法的返回值直接给到前端
    @ExceptionHandler({ServiceException.class, FileUploadException.class, SaTokenException.class})//用于统一处理抛出的异常
    public JsonResult<Void> handleServiceException(Throwable e) {
        JsonResult<Void> result = new JsonResult<>(e);
        if (e instanceof UsernameDuplicatedException) {
            result.setState(4000);
            result.setMessage("用户名已经被占用");
        } else if (e instanceof InsertException) {
            result.setState(5000);
            result.setMessage("插入数据时出现未知的异常");
        } else if (e instanceof UserNotFoundException) {
            result.setState(5001);
            result.setMessage("用户数据不存在的异常");
        } else if (e instanceof PasswordNotMatchException) {
            result.setState(5002);
            result.setMessage("用户名的密码错误的异常");
        } else if (e instanceof UpdateException) {
            result.setState(5001);
            result.setMessage("更新数据是时产生未知异常");
        } else if (e instanceof FileEmptyException) {
            result.setState(6000);
            result.setMessage("文件为空的异常");
        } else if (e instanceof FileSizeException) {
            result.setState(6001);
            result.setMessage("文件大小超过异常");
        } else if (e instanceof FileTypeNotMatchException) {
            result.setState(6002);
            result.setMessage("文件类型不符异常");
        } else if (e instanceof FileStatusException) {
            result.setState(6003);
            result.setMessage("文件上传状态异常");
        } else if (e instanceof FileUploadIOException) {
            result.setState(6004);
            result.setMessage("文件读取的异常");
        }
        return result;
    }

    /**
     * 获取session对象中的userid
     *
     * @param session session对象
     * @return 当前登录的用户userid的值
     */

    protected final Integer getUserIdFromSession(HttpSession session) {
        return Integer.valueOf(session.getAttribute("userid").toString());

    }

    /**
     * 获取当前登录用户的username
     *
     * @param session session对象
     * @return 当前登录用户的用户名
     */
    protected final String getUserNameFromSession(HttpSession session) {
        return session.getAttribute("username").toString();
    }
}
